const db = require("../db/mysql");
const userInfoSql = "select id,userName,nickname,email,userPic from ev_user where id=?"
const updateInfoSql = "update ev_user set ? where id=?";
const selInfoSql = "select * from ev_user where id=?";
const updateUserPwd = "update ev_user set userPwd=? where id=?";
const updateAvatarSql = "update ev_user set userPic=? where id=?";
var formidable = require('formidable');
// 导入处理密码的模块
const bcrypt = require("bcryptjs")

const fs = require("fs");
/**
 * 获取用户基本信息的处理函数
 * @param {*} req 
 * @param {*} res 
 */
exports.getUserInfo = (req,res)=>{
    // 身份认证成功之后制动挂载user对象
    db.query(userInfoSql,req.user.id,(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        // 执行成功 查询结果可能为空
        if (result.length !== 1) {
            return res.cc("获取用户信息失败")
        }
        // 用户信息获取成功
        res.send({
            status:0,
            message:"获取用户信息成功",
            data:result[0]
        })
    })
}
/**
 * 更新用户基本信息
 * @param {*} req 
 * @param {*} res 
 */
exports.updateUserInfo = (req,res)=>{
    // res.send("接口测试")
    db.query(updateInfoSql,[req.body,req.body.id],(err,results)=>{
        if (err) {
            return res.cc(err)
        }
        // 执行成功 影响行数不为1
        if (results.affectedRows !== 1) {
            return res.cc("更新用户信息失败")
        }
        res.cc("更新用户信息成功！",0)
    })
}
/**
 * 更新密码
 * @param {*} req 
 * @param {*} res 
 */
exports.updatePassword = (req,res)=>{
    // res.send("ok")
    // 根据id查询用户基本信息
    db.query(selInfoSql,req.user.id,(err,result)=>{
        if (err) {
            return res.cc(err)
        }
        // 执行成功 查询结果可能为空
        if (result.length !== 1) {
            return res.cc("用户不存在")
        }
        // 判断用户密码是否正确
        const compareres= bcrypt.compareSync(req.body.oldPwd,result[0].userPwd)
        if (!compareres) {
            return res.cc("旧密码错误")
        }
        // 更新数据库中的密码
        const newpwd = bcrypt.hashSync(req.body.newPwd,10);
        //执行更新密码
        db.query(updateUserPwd,[newpwd,req.user.id],(errs,results)=>{
            if (errs) {
                return res.cc(err)
            }
            if (results.affectedRows !== 1) {
                return res.cc("更新用户信息失败")
            }
            res.cc("更新密码成功",0)
            return
        })
    })
}
/**
 * 上传图片
 */
exports.upLoadImg=(req,res)=>{
    let oldName = req.file.path; // 上传后默认的文件名 : 15daede910f2695c1352dccbb5c3e897
    var timestr = new Date().getTime()
    console.log(req.file.originalname);
    var filenameend = req.file.originalname.split(".")[1]
    var newName ='upload/'+ timestr+"."+filenameend; // 指定文件路径和文件名
    console.log(req.user.id,newName);
        fs.rename(oldName, newName,(err)=>{
            if(err) throw err;
            // res.cc("success",0)
            db.query(updateAvatarSql,[newName,req.user.id],(err,result)=>{
                if (err) {
                    return res.cc(err)
                }
                // 执行成功 查询结果可能为空
                if (result.affectedRows !== 1) {
                    return res.cc("用户不存在")
                }
                return res.cc("更新头像成功",0)
            })
          })
}
/**
 * 更新用户头像
 */
exports.updateAvatar = (req,res)=>{
    // db.query(updateAvatarSql,[req.body.avatar,req.user.id],(err,result)=>{
    //     if (err) {
    //         return res.cc(err)
    //     }
    //     // 执行成功 查询结果可能为空
    //     if (result.affectedRows !== 1) {
    //         return res.cc("用户不存在")
    //     }
    //     res.cc("更新头像成功",0)
    //     return
    // })
}
function fileToBuf(file, cb){
    var fr = new FileReader();
    var filename = file.name;

    fr.readAsArrayBuffer(file);
    fr.addEventListener("loadend",(e) => {
        var buf = e.target.result;
        cb(buf, filename);
    },false);
}